package org.galio.tourcoruna;

import java.util.List;

import org.galio.tourcoruna.modelo.CComercial;
import org.galio.tourcoruna.modelo.Hotel;
import org.galio.tourcoruna.modelo.Monumento;
import org.galio.tourcoruna.modelo.Museo;
import org.galio.tourcoruna.modelo.Lugar;
import org.galio.tourcoruna.servicio.LugarService;
import org.galio.tourcoruna.servicio.LugarServiceImpl;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Looper;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MiListaTour  extends ListActivity 
{
	private LocationManager mlocationManager;
	private LocationListener mlocationListener;
	Thread thread;
	ProgressDialog pd;
	LugarService l = new LugarServiceImpl();    		        

	TipoLugar tipoLugar = TipoLugar.ALL;
	List <String> nombresDeLugares = null;
	Lugar lugarSeleccionado;
	String lugarSeleccionadoTelefono = null, lugarSeleccionadoWeb = null;
	String[] items;
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);				

		Bundle bundle = this.getIntent().getExtras();
		tipoLugar = TipoLugar.values()[bundle.getInt("tipoLugar")];

		nombresDeLugares = l.getLugaresNamesByType(tipoLugar);

		//inicializar nuestra ListActivity con una instancia de ArrayAdapter y los nombre de nuestro string

		ArrayAdapter<String> adapt =  new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, nombresDeLugares);


		setListAdapter(adapt);



	}


	@Override
	protected void onListItemClick(ListView ll, View v, int position, long id) 
	{
		super.onListItemClick(ll, v, position, id);

		String nombreLugar = nombresDeLugares.get(position);//nombre del item pulsado		
		lugarSeleccionado = l.getLugarByName(nombreLugar);

		if (CComercial.class.isInstance(lugarSeleccionado)) {
			String[] items2 = {"Ver Mapa", "Informacion", "LLamar por teléfono", "Ir a la web"};
			items = items2;
			lugarSeleccionadoWeb = ((CComercial) lugarSeleccionado).getWeb();
			lugarSeleccionadoTelefono = ((CComercial) lugarSeleccionado).getTelefono();
		}
		if (Hotel.class.isInstance(lugarSeleccionado)) {
			String[] items2 = {"Ver Mapa", "Informacion", "LLamar por teléfono"};
			items = items2;
			lugarSeleccionadoTelefono = ((Hotel) lugarSeleccionado).getTelefono();
		}
		if (Museo.class.isInstance(lugarSeleccionado)) {
			String[] items2 = {"Ver Mapa", "Informacion", "LLamar por teléfono"};
			items = items2;
			lugarSeleccionadoTelefono = ((Museo) lugarSeleccionado).getTelefono();
		}
		if (Monumento.class.isInstance(lugarSeleccionado)){ 
			String[] items2 = {"Ver Mapa", "Informacion"};
			items = items2;
		}


		AlertDialog.Builder builder = new AlertDialog.Builder(this);		 
		builder.setTitle(lugarSeleccionado.getNombre());

		builder.setItems(items, new DialogInterface.OnClickListener() 
		{
			public void onClick(DialogInterface dialog, int item)
			{
				Log.i("Dialogos", "Opción elegida: " + items[item]);
				if(items[item].equals("LLamar por teléfono"))
				{
					Intent callIntent = new Intent(Intent.ACTION_CALL);
					callIntent.setData(Uri.parse("tel:"+ lugarSeleccionadoTelefono));
					startActivity(callIntent);
				}
				else if(items[item].equals("Ir a la web"))
				{
					Intent callIntent = new Intent(Intent.ACTION_VIEW,
							Uri.parse("http://" + lugarSeleccionadoWeb));
					startActivity(callIntent);
				}
				else if(items[item].equals("Ver Mapa"))
				{
					getPosicion();
				}
				else if(items[item].equals("Informacion"))
				{
					mostrarInformacion();
				}
			}

		});
		builder.create();
		builder.show();



	}
	public void onDestroy()
	{
		super.onDestroy();

	}



	@Override
	protected void onStop() 
	{
		super.onStop();
		if(pd!=null)
		{
			pd.dismiss();
			if (mlocationManager!=null)
				mlocationManager.removeUpdates(mlocationListener);
			mlocationManager = null;

		}
	}



	public void getPosicion()
	{

		thread = new Thread(){
			@Override
			public void run()
			{
				Looper.prepare(); 
				pd = new ProgressDialog(MiListaTour.this);
				pd.setMessage("CARGANDO DATOS");
				pd.setCancelable(true);
				pd.show();

				mlocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
				mlocationListener = new MyLocationListener();

				if (mlocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) )
				{
					mlocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 15, 15, mlocationListener);
				}
				else if (mlocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) )
				{	
					mlocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 15, 15, mlocationListener);
				}
				else   
				{
					pd.dismiss();
					Toast.makeText(MiListaTour.this, "Redes inalambricas y GPS desactivados.", Toast.LENGTH_LONG).show();
				}


				Looper.loop();
			}

		};
		thread.start();
	}

	private class MyLocationListener implements LocationListener //interfaz
	{

		public void onLocationChanged(Location location) 
		{

			mostrarPosicion(location);			

		}

		public void onProviderDisabled(String provider) {}

		public void onProviderEnabled(String provider) {}

		public void onStatusChanged(String provider, int status, Bundle extras) {}


	}

	public void mostrarPosicion(Location location)
	{
		if (location != null) 
		{	

			Bundle bundle = new Bundle();

			bundle.putDouble("miLat", location.getLatitude());
			bundle.putDouble("miLon", location.getLongitude());
			bundle.putInt("tipoLugar", tipoLugar.getNum());
			bundle.putString("nombreLugar", lugarSeleccionado.getNombre());
			Intent i = new Intent(MiListaTour.this, MiMapaParadaTour.class);
			i.putExtras(bundle);	
			startActivity(i);


		}

		else Toast.makeText(this, "LOCALIZACIÓN NULA", Toast.LENGTH_SHORT).show();



	}  
	
	private void mostrarInformacion() {
  	  Bundle bundle = new Bundle();
	  
  	  bundle.putString("nombreLugar", lugarSeleccionado.getNombre());
      Intent a = new Intent(MiListaTour.this, Informacion.class);
      a.putExtras(bundle);	
      startActivity(a);		
	}


}
